e`\^^B="010B % \alpha\mathcode`\^^C="010C % \beta\mathcode`\^^D="225E % \land\mathcode`\^^E="023A % \lnot\mathcode`\^^F="3232 % \in\mathcode`\^^G="0119 % \pi\mathcode`\^^H="0115 % \lambda\mathcode`\^^I="010D % \gamma\mathcode`\^^J="010E % \delta\mathcode`\^^K="3222 % \uparrow\mathcode`\^^L="2206 % \pm\mathcode`\^^M="2208 % \oplus\mathcode`\^^N="0231 % \infty\mathcode`\^^O="0140 % \partial\mathcode`\^^P="321A % \subset\mathcode`\^^Q="321B % \supset\mathcode`\^^R="225C % \cap\mathcode`\^^S="225B % \cup\mathcode`\^^T="0238 % \forall\mathcode`\^^U="0239 % \exists\mathcode`\^^V="220A % \otimes\mathcode`\^^W="3224 % \leftrightarrow\mathcode`\^^X="3220 % \leftarrow\mathcode`\^^Y="3221 % \rightarrow\mathcode`\^^Z="8000 % \ne\mathcode`\^^[="2205 % \diamond\mathcode`\^^\="3214 % \le\mathcode`\^^]="3215 % \ge\mathcode`\^^^="3211 % \equiv\mathcode`\^^_="225F % \lor\mathcode`\ ="8000 % \space\mathcode`\!="5021\mathcode`\'="8000 % ^\prime\mathcode`\(="4028\mathcode`\)="5029\mathcode`\*="2203 % \ast\mathcode`\+="202B\mathcode`\,="613B\mathcode`\-="2200\mathcode`\.="013A\mathcode`\/="013D\mathcode`\:="303A\mathcode`\;="603B\mathcode`\<="313C\mathcode`\=="303D\mathcode`\>="313E\mathcode`\?="503F\mathcode`\[="405B\mathcode`\\="026E % \backslash\mathcode`\]="505D\mathcode`\_="8000 % \_\mathcode`\{="4266\mathcode`\|="026A\mathcode`\}="5267\mathcode`\^^?="1273 % \smallint% INITEX sets \uccode`x=`X and \uccode `X=`X for all letters x,% and \lccode`x=`x, \lccode`X=`x; all other values are zero.% No changes to those tables are needed in plain TeX format.% INITEX sets \sfcode x=1000 for all x, except that \sfcode`X=999% for uppercase letters. The following changes are needed:\sfco\sfcode`\'=0 \sfcode`\]=0% The \nonfrenchspacing macro will make further changes to \sfcode values.% Finally, INITEX sets all \delcode values to -1, except \delcode`.=0\delcode`\(="028300\delcode`\)="029301\delcode`\[="05B302\delcode`\]="05D303\delcode`\<="26830A\delcode`\>="26930B\delcode`\/="02F30E\delcode`\|="26A30C\delcode`\\="26E30F% N.B. { and } should NOT get delcodes; otherwise parameter grouping fails!% To make the plain macros more efficient in time and space,% several constant values are declared here as control sequences.% If they were changed, anything could happen; so they are private symbols.\chardef\@ne=1\chardef\tw@=2\chardef\thr@@=3\chardef\sixt@@n=16\chardef\@cclv=255\mathchardef\@cclvi=256\mathchardef\@m=1000\mathchardef\@M=10000\mathchardef\@MM=20000% Allocation of registers% Here are macros for the automatic allocation of \count, \box, \dimen,% \skip, \muskip, and \toks registers, as well as \read and \write% stream numbers, \fam codes, and \insert numbers.\message{registers,}% When a register is used only temporarily, it need not be allocated;% grouping can be used, making the value previously in the register return% after the close of the group. The main use of these macros is for% registers that are defined by one macro and used by others, possibly at% different nesting levels. All such registers should be defined through% these macros; otherwise conflicts may occur, especially when two or more% more macro packages are being used at once.% The following counters are reserved:% 0 to 9 page numbering% 10 count allocation% 11 dimen allocation% 12 skip allocation% 13 muskip allocation% 14 box allocation% 15 toks allocation% 16 read file allocation% 17 write file allocation% 18 math family allocation% 19 insert allocation% 20 the most recently allocated number% 21 constant -1% New counters are allocated starting with 22, 23, etc. Other registers are% allocated starting with 10. This leaves 0 through 9 for the user to play% with safely, except that counts 0 to 9 are considered to be the page and% subpage numbers (since they are displayed during output). In this scheme,% \count 10 always contains the number of the highest-numbered counter that% has been allocated, \count 14 the highest-numbered box, etc.% Inserts are given numbers 254, 253, etc., since they require a \count,% \dimen, \skip, and \box all with the same number; \count 19 contains the% lowest-numbered insert that has been allocated. Of course, \box255 is% reserved for \output; \count255, \dimen255, and \skip255 can be used freely.% It is recommended that macro designers always use% \global assignments with respect to registers numbered 1, 3, 5, 7, 9, and% always non-\global assignments with respect to registers 0, 2, 4, 6, 8, 255.% This will prevent ``save stack buildup'' that might otherwise occur.\count10=21 % allocates \count registers 22, 23, ...\count11=9 % allocates \dimen registers 10, 11, ...\count12=9 % allocates \skip registers 10, 11, ...\count13=9 % allocates \muskip registers 10, 11, ...\count14=9 % allocates \box registers 10, 11, ...\count15=9 % allocates \toks registers 10, 11, ...\count16=-1 % allocates input streams 0, 1, ...\count17=-1 % allocates output streams 0, 1, ...\count18=3 % allocates math families 4, 5, ...\count19=255 % allocates insertions 254, 253, ...\countdef\insc@unt=19 % the insertion counter\countdef\allocationnumber=20 % the most recent allocation\countdef\m@ne=21 \m@ne=-1 % a handy constant\def\wlog{\immediate\write\m@ne} % write on log file (only)% Here are abbreviations for the names of scratch registers% that don't need to be allocated.\countdef\count@=255\dimendef\dimen@=0\dimendef\dimen@i=1 % global only\dimendef\dimen@ii=2\skipdef\skip@=0\toksdef\toks@=0% Now, we define \newcount, \newbox, etc. so that you can say \newcount\foo% and \foo will be defined (with \countdef) to be the next counter.% To find out which counter \foo is, you can look at \allocationnumber.% Since there's no \boxdef command, \chardef is used to define a \newbox,% \newinsert, \newfam, and so on.\outer\def\newcount{\alloc@0\count\countdef\insc@unt}\outer\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}\outer\def\newskip{\alloc@2\skip\skipdef\insc@unt}\outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi}\outer\def\newbox{\alloc@4\box\chardef\insc@unt}\let\newtoks=\relax % we do this to allow plain.tex to be read in twice\outer\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}\outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi}\outer\def\newread{\alloc@6\read\chardef\sixt@@n}\outer\def\newwrite{\alloc@7\write\chardef\sixt@@n}\outer\def\newfam{\alloc@8\fam\chardef\sixt@@n}\def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne \ch@ck#1#4#2% make sure there's still room \allocationnumber=\count1#1% \global#3#5=\allocationnumber \wlog{\string#5=\string#2\the\allocationnumber}}\outer\def\newinsert#1{\global\advance\insc@unt by\m@ne \ch@ck0\insc@unt\count \ch@ck1\insc@unt\dimen \ch@ck2\insc@unt\skip \ch@ck4\insc@unt\box \allocationnumber=\insc@unt \global\chardef#1=\allocationnumber \wlog{\string#1=\string\insert\the\allocationnumber}}\def\ch@ck#1#2#3{\ifnum\count1#1<#2% \else\errmessage{No room for a new #3}\fi}% Here are some examples of allocation.\newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen>\newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow% LaTeX change: the PLAIN \centering dimension conflicts with% LaTeX's \centering command, so it is redefined to \@centering.% This dimension is used by LaTeX.\newskip\@centering \@centering=0pt plus 1000pt minus 1000pt\newdimen\p@ \p@=1pt % this saves macro space and time\newdimen\z@ \z@=0pt % can be used both for 0pt and 0\newskip\z@skip \z@skip=0pt plus0pt minus0pt\newbox\voidb@x % permanently void box register% And here's a different sort of allocation:% For example, \newif\iffoo creates \footrue, \foofalse to go with \iffoo.\outer\def\newif#1{\count@\escapechar \escapechar\m@ne \expandafter\expandafter\expandafter \edef\@if#1{true}{\let\noexpand#1=\noexpand\iftrue}% \expandafter\expandafter\expandafter \edef\@if#1{false}{\let\noexpand#1=\noexpand\iffalse}% \@if#1{false}\escapechar\count@} % the condition starts out false\def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname}{\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required% Assign initial values to TeX's parameters\message{parameters,}% All of TeX's numeric parameters are listed here,% but the code is commented out if no special value needs to be set.% INITEX makes all parameters zero except where noted.\pretolerance=100\tolerance=200 % INITEX sets this to 10000\hbadness=1000\vbadness=1000\linepenalty=10\hyphenpenalty=50\exhyphenpenalty=50\binoppenalty=700\relpenalty=500\clubpenalty=150\widowpenalty=150\displaywidowpenalty=50\brokenpenalty=100\predisplaypenalty=10000% \postdisplaypenalty=0% \interlinepenalty=0% \floatingpenalty=0, set during \insert% \outputpenalty=0, set before TeX enters \output\doublehyphendemerits=10000\finalhyphendemerits=5000\adjdemerits=10000% \looseness=0, cleared by TeX after each paragraph% \pausing=0% \tracingonline=0% \tracingmacros=0% \tracingstats=0% \tracingparagraphs=0% \tracingpages=0% \tracingoutput=0\tracinglostchars=1% \tracingcommands=0% \tracingrestores=0\uchyph=1% \globaldefs=0% \maxdeadcycles=25 % INITEX does this% \hangafter=1 % INITEX does this, also TeX after each paragraph% \fam=0% \mag=1000 % INITEX does this% \escapechar=`\\ % INITEX does this\defaulthyphenchar=`\-\defaultskewchar=-1% \endlinechar=`\^^M % INITEX does this\newlinechar=-1\delimiterfactor=901% \time=now % TeX does this at beginning of job% \day=now % TeX does this at beginning of job% \month=now % TeX does this at beginning of job% \year=now % TeX does this at beginning of job\showboxbreadth=5\showboxdepth=3\hfuzz=0.1pt\vfuzz=0.1pt\overfullrule=5pt\hsize=6.5in\vsize=8.9in\maxdepth=4pt\splitmaxdepth=\maxdimen\boxmaxdepth=\maxdimen% \lineskiplimit=0pt, changed by \normalbaselines\delimitershortfall=5pt\nulldelimiterspace=1.2pt\scriptspace=0.5pt% \mathsurround=0pt% \predisplaysize=0pt, set before TeX enters $$% \displaywidth=0pt, set before TeX enters $$% \displayindent=0pt, set before TeX enters $$\parindent=20pt% \hangindent=0pt, zeroed by TeX after each paragraph% \hoffset=0pt% \voffset=0pt% \baselineskip=0pt, changed by \normalbaselines% \lineskip=0pt, changed by \normalbaselines\parskip=0pt plus 1pt\abovedisplayskip=12pt plus 3pt minus 9pt\abovedisplayshortskip=0pt plus 3pt\belowdisplayskip=12pt plus 3pt minus 9pt\belowdisplayshortskip=7pt plus 3pt minus 4pt% \leftskip=0pt% \rightskip=0pt\topskip=10pt\splittopskip=10pt% \tabskip=0pt% \spaceskip=0pt% \xspaceskip=0pt\parfillskip=0pt plus 1fil\thinmuskip=3mu\medmuskip=4mu plus 2mu minus 4mu\thickmuskip=5mu plus 5mu% We also define special registers that function like parameters:\newskip\smallskipamount \smallskipamount=3pt plus 1pt minus 1pt\newskip\medskipamount \medskipamount=6pt plus 2pt minus 2pt\newskip\bigskipamount \bigskipamount=12pt plus 4pt minus 4pt\newskip\normalbaselineskip \normalbaselineskip=12pt\newskip\normallineskip \normallineskip=1pt\newdimen\normallineskiplimit \normallineskiplimit=0pt\newdimen\jot \jot=3pt\newcount\interdisplaylinepenalty \interdisplaylinepenalty=100\newcount\interfootnotelinepenalty \interfootnotelinepenalty=100% Definitions for preloaded fonts\def\magstephalf{1095 }\def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax}% Fonts assigned to \preloaded are not part of "plain TeX",% but they are preloaded so that other format packages can use them.% For example, if another set of macros says "\font\ninerm=cmr9",% TeX will not have to reload the font metric information for cmr9.% LaTeX font definitions are taken from the file LFONTS.TEX,% so all of PLAIN's font definitions are commented out.%\message{fonts,}%%\font\tenrm=cmr10 % roman text%\font\preloaded=cmr9%\font\preloaded=cmr8%\font\sevenrm=cmr7%\font\preloaded=cmr6%\font\fiverm=cmr5%%\font\teni=cmmi10 % math italic%\font\preloaded=cmmi9%\font\preloaded=cmmi8%\font\seveni=cmmi7%\font\preloaded=cmmi6%\font\fivei=cmmi5%%\font\tensy=cmsy10 % math symbols%\font\preloaded=cmsy9%\font\preloaded=cmsy8%\font\sevensy=cmsy7%\font\preloaded=cmsy6%\font\fivesy=cmsy5%%\font\tenex=cmex10 % math extension%%\font\preloaded=cmss10 % sans serif%\font\preloaded=cmssq8%%\font\preloaded=cmssi10 % sans serif italic%\font\preloaded=cmssqi8%%\font\tenbf=cmbx10 % boldface extended%\font\preloaded=cmbx9%\font\preloaded=cmbx8%\font\sevenbf=cmbx7%\font\preloaded=cmbx6%\font\fivebf=cmbx5%%\font\tentt=cmtt10 % typewriter%\font\preloaded=cmtt9%\font\preloaded=cmtt8%%\font\preloaded=cmsltt10 % slanted typewriter%%\font\tensl=cmsl10 % slanted roman%\font\preloaded=cmsl9%\font\preloaded=cmsl8%%\font\tenit=cmti10 % text italic%\font\preloaded=cmti9%\font\preloaded=cmti8%\font\preloaded=cmti7%%\message{more fonts,}%\font\preloaded=cmu10 % unslanted text italic%%\font\preloaded=cmmib10 % bold math italic%\font\preloaded=cmbsy10 % bold math symbols%%\font\preloaded=cmcsc10 % caps and small caps%